#!/bin/bash

###############################################
# 批量配置IP地址脚本
# 名称：batch_set_ip.sh
# 版本：1.2
# 作者：YourName
# 日期：2025-03-22
# 描述：
#   批量为多个网络接口配置静态IP或DHCP。
#   支持配置静态IP和自动获取IP (DHCP)。
#   通过配置文件指定接口及IP地址。
#   提供帮助信息，显示脚本使用方法。
###############################################

CONFIG_FILE="$(dirname "$0")/ip_config.txt"
LOG_FILE="$(dirname "$0")/batch_set_ip.log"

# 显示脚本标题
show_title() {
    echo "=============================="
    echo " 批量配置IP地址脚本 "
    echo "=============================="
}

# 显示帮助信息
show_help() {
    echo "用法： ./batch_set_ip.sh [选项]"
    echo "选项："
    echo "  -h, --help      显示帮助信息"
    echo "  -c, --config    指定配置文件 (默认: ip_config.txt)"
    echo "示例： ./batch_set_ip.sh -c /path/to/config.txt"
    echo "配置文件格式示例："
    echo "  eth0 static 192.168.1.100 24 192.168.1.1"
    echo "  wlan0 dhcp"
}

# 读取配置文件
read_config() {
    if [ ! -f "$CONFIG_FILE" ]; then
        echo "配置文件 $CONFIG_FILE 不存在，请创建后重试。"
        exit 1
    fi
    mapfile -t config_lines < "$CONFIG_FILE"
}

# 应用IP配置
apply_ip_config() {
    local iface=$1
    local method=$2
    local ip_addr=$3
    local netmask=$4
    local gateway=$5

    echo "配置接口 $iface..."
    if [ "$method" == "dhcp" ]; then
        sudo ip addr flush dev "$iface"
        sudo dhclient -r "$iface"
        sudo dhclient "$iface"
        echo "[$(date "+%Y-%m-%d %H:%M:%S")] $iface: DHCP 配置完成" | tee -a "$LOG_FILE"
    elif [ "$method" == "static" ]; then
        sudo ip addr flush dev "$iface"
        sudo ip addr add "$ip_addr/$netmask" dev "$iface"
        sudo ip route add default via "$gateway" dev "$iface"
        echo "[$(date "+%Y-%m-%d %H:%M:%S")] $iface: 静态IP配置完成 ($ip_addr/$netmask via $gateway)" | tee -a "$LOG_FILE"
    else
        echo "无效的配置方法：$method"
    fi
}

# 主程序
main() {
    show_title
    if [[ "$1" == "-h" || "$1" == "--help" ]]; then
        show_help
        exit 0
    elif [[ "$1" == "-c" || "$1" == "--config" ]]; then
        CONFIG_FILE="$2"
    fi
    read_config
    for line in "${config_lines[@]}"; do
        iface=$(echo "$line" | awk '{print $1}')
        method=$(echo "$line" | awk '{print $2}')
        ip_addr=$(echo "$line" | awk '{print $3}')
        netmask=$(echo "$line" | awk '{print $4}')
        gateway=$(echo "$line" | awk '{print $5}')
        apply_ip_config "$iface" "$method" "$ip_addr" "$netmask" "$gateway"
    done
    echo "批量IP配置完成。"
}

main "$@"
